home *** CD-ROM | disk | FTP | other *** search
/ Game Programming in C++ - Start to Finish / GameProgrammingS.iso / developer_install / CEGUISDK-0.4.1-VC6-STLport.exe / {app} / include / CEGUIFactoryModule.h < prev    next >
C/C++ Source or Header  |  2005-07-10  |  5KB  |  137 lines

  1. /************************************************************************
  2.     filename:     CEGUIFactoryModule.h
  3.     created:    12/4/2004
  4.     author:        Paul D Turner
  5.     
  6.     purpose:    Defines interface for object that controls a loadable
  7.                 module (.dll/.so/ whatever) that contains concrete
  8.                 window / widget implementations and their factories.
  9. *************************************************************************/
  10. /*************************************************************************
  11.     Crazy Eddie's GUI System (http://www.cegui.org.uk)
  12.     Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
  13.  
  14.     This library is free software; you can redistribute it and/or
  15.     modify it under the terms of the GNU Lesser General Public
  16.     License as published by the Free Software Foundation; either
  17.     version 2.1 of the License, or (at your option) any later version.
  18.  
  19.     This library is distributed in the hope that it will be useful,
  20.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  21.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  22.     Lesser General Public License for more details.
  23.  
  24.     You should have received a copy of the GNU Lesser General Public
  25.     License along with this library; if not, write to the Free Software
  26.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  27. *************************************************************************/
  28. #ifndef _CEGUIFactoryModule_h_
  29. #define _CEGUIFactoryModule_h_
  30.  
  31. /*************************************************************************
  32.     The following is basically taken from DynLib.h, which is part of
  33.     the Ogre project (http://www.ogre3d.org/)
  34. *************************************************************************/
  35. #if defined(__WIN32__) || defined(_WIN32)
  36. #    define DYNLIB_HANDLE hInstance
  37. #    define DYNLIB_LOAD( a ) LoadLibrary( a )
  38. #    define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )
  39. #    define DYNLIB_UNLOAD( a ) !FreeLibrary( a )
  40. #    define DYNLIB_ERROR( )  "Unknown Error"
  41.  
  42.     struct HINSTANCE__;
  43.     typedef struct HINSTANCE__* hInstance;
  44.  
  45. #elif defined(__linux__)
  46. #    define DYNLIB_HANDLE void*
  47. #    define DYNLIB_LOAD( a ) dlopen( a, RTLD_LAZY )
  48. #    define DYNLIB_GETSYM( a, b ) dlsym( a, b )
  49. #    define DYNLIB_UNLOAD( a ) dlclose( a )
  50. #    define DYNLIB_ERROR( ) dlerror( )
  51.  
  52. #elif defined(__APPLE_CC__)
  53. #    define DYNLIB_HANDLE CFBundleRef
  54. #    define DYNLIB_LOAD( a ) mac_loadExeBundle( a )
  55. #    define DYNLIB_GETSYM( a, b ) mac_getBundleSym( a, b )
  56. #    define DYNLIB_UNLOAD( a ) mac_unloadExeBundle( a )
  57. #    define DYNLIB_ERROR( ) mac_errorBundle()
  58. #endif
  59.  
  60.  
  61. // Start of CEGUI namespace section
  62. namespace CEGUI
  63. {
  64.  
  65. /*!
  66. \brief
  67.     Class that encapsulates access to a dynamic loadable module containing implementations of Windows, Widgets, and their factories.
  68. */
  69. class FactoryModule
  70. {
  71. public:
  72.     /*!
  73.     \brief
  74.         Construct the FactoryModule object by loading the dynamic loadable module specified.
  75.  
  76.     \param filename
  77.         String object holding the filename of a loadable module.
  78.  
  79.     \return
  80.         Nothing
  81.     */
  82.     FactoryModule(const String& filename);
  83.  
  84.  
  85.     /*!
  86.     \brief
  87.         Destroys the FactoryModule object and unloads any loadable module.
  88.  
  89.     \return
  90.         Nothing
  91.     */
  92.     virtual ~FactoryModule(void);
  93.  
  94.  
  95.     /*!
  96.     \brief
  97.         Register a WindowFactory for \a type Windows.
  98.  
  99.     \param type
  100.         String object holding the name of the Window type a factory is to be registered for.
  101.  
  102.     \return
  103.         Nothing.
  104.     */
  105.     void    registerFactory(const String& type) const;
  106.  
  107.  
  108.     /*!
  109.     \brief
  110.         Register all factories available in this module.
  111.  
  112.     \return
  113.         uint value indicating the number of factories registered.
  114.     */
  115.     uint registerAllFactories() const;
  116.  
  117. private:
  118.     /*************************************************************************
  119.         Implementation Data
  120.     *************************************************************************/
  121.     static const char    RegisterFactoryFunctionName[];
  122.     static const char   RegisterAllFunctionName[];
  123.  
  124.     typedef void (*FactoryRegisterFunction)(const String&); 
  125.     typedef uint (*RegisterAllFunction)(void);
  126.  
  127.     FactoryRegisterFunction    d_regFunc;    //!< Pointer to the function called to register factories.
  128.     RegisterAllFunction d_regAllFunc;   //!< Pointer to a function called to register all factories in a module.
  129.     String            d_moduleName;        //!< Holds the name of the loaded module.
  130.     DYNLIB_HANDLE    d_handle;            //!< Pointer to a ImplDat derived class that can hold any required implementation data
  131. };
  132.  
  133. } // End of  CEGUI namespace section
  134.  
  135.  
  136. #endif    // end of guard _CEGUIFactoryModule_h_
  137.